import { NextRequest, NextResponse } from 'next/server';
import UserModel from '@/models/user';
import SmsService, { VerificationPurpose } from '@/utils/smsService';
import { hashPassword } from '@/utils/auth';

export async function POST(request: NextRequest) {
  try {
    console.log('手机号重置密码API请求开始处理');
    const body = await request.json();
    const { phone, code, newPassword } = body;
    
    console.log(`尝试通过手机号重置密码: ${phone}`);
    
    // 验证必填字段
    if (!phone || !code || !newPassword) {
      console.log('重置密码失败: 信息不完整');
      return NextResponse.json(
        { error: '手机号、验证码和新密码不能为空' },
        { status: 400 }
      );
    }
    
    // 验证手机号格式
    const phoneRegex = /^1[3-9]\d{9}$/;
    if (!phoneRegex.test(phone)) {
      console.log('重置密码失败: 手机号格式不正确');
      return NextResponse.json(
        { error: '手机号格式不正确' },
        { status: 400 }
      );
    }
    
    // 验证密码强度
    if (newPassword.length < 6) {
      console.log('重置密码失败: 密码长度不符合要求');
      return NextResponse.json(
        { error: '新密码长度至少为6个字符' },
        { status: 400 }
      );
    }
    
    // 验证验证码
    const isCodeValid = await SmsService.verifyCode(
      phone, 
      code, 
      'password_reset' as VerificationPurpose
    );
    
    if (!isCodeValid) {
      console.log('重置密码失败: 验证码无效或已过期');
      return NextResponse.json(
        { error: '验证码无效或已过期' },
        { status: 400 }
      );
    }
    
    // 查找用户
    const user = await UserModel.findByPhone(phone);
    if (!user) {
      console.log('重置密码失败: 未找到该手机号关联的用户');
      return NextResponse.json(
        { error: '未找到该手机号关联的用户' },
        { status: 404 }
      );
    }
    
    // 更新密码
    try {
      const hashedPassword = await hashPassword(newPassword);
      
      // 更新用户密码
      const updated = await UserModel.updatePassword(user.id, hashedPassword);
      
      if (!updated) {
        console.log('重置密码失败: 更新密码时出错');
        return NextResponse.json(
          { error: '更新密码失败' },
          { status: 500 }
        );
      }
      
      console.log('密码重置成功');
      return NextResponse.json({
        success: true,
        message: '密码重置成功'
      });
    } catch (error) {
      console.error('重置密码时数据库错误:', error);
      return NextResponse.json(
        { 
          error: '重置密码失败', 
          details: error instanceof Error ? error.message : '未知错误'
        },
        { status: 500 }
      );
    }
  } catch (error) {
    console.error('重置密码处理过程中发生错误:', error);
    return NextResponse.json(
      { 
        success: false,
        error: '服务器错误，请稍后再试', 
        details: error instanceof Error ? error.message : '未知错误'
      },
      { status: 500 }
    );
  }
}
